﻿using System;
using System.Collections.Generic;
using System.Security.Principal;

/// <summary>
/// 用于提供数据访问功能。
/// </summary>
public class DataAccess
{
	static List<UserObject> _allUsers = new List<UserObject>();

	/// <summary>
	/// 根据用户名获取用户实体对象。
	/// </summary>
	/// <param name="name">用户名。</param>
	/// <returns>具有指定用户名的用户实体，如果找不到则返回null。</returns>
	public static UserObject GetUserByName(string name)
	{
		foreach(UserObject uo in _allUsers)
		{
			if(uo.Name == name)
				return uo;
		}

		return null;
	}

	/// <summary>
	/// 添加用户。
	/// </summary>
	/// <param name="user">待添加的用户实体。</param>
	/// <exception cref="ArgumentNullException">当user对象为null时引发。</exception>
	/// <exception cref="ArgumentException">当具有指定用户名的用户已存在时引发。</exception>
	public static void AddUser(UserObject user)
	{
		if(user == null)
			throw new ArgumentNullException();

		if(GetUserByName(user.Name) != null)
			throw new ArgumentException("用户已存在。");

		_allUsers.Add(user);
	}
}

/// <summary>
/// 用户实体类。
/// </summary>
public class UserObject : IPrincipal, IIdentity
{
	/// <summary>
	/// 用户名。
	/// </summary>
	public string Name;

	/// <summary>
	/// 密码散列值。
	/// </summary>
	public string PasswordHash;

	/// <summary>
	/// 密码salt值。
	/// </summary>
	public string PasswordSalt;

	#region IIdentity Members

	public string AuthenticationType
	{
		get
		{
			return "Froms";
		}
	}

	public bool IsAuthenticated
	{
		get
		{
			return true;
		}
	}

	string IIdentity.Name
	{
		get
		{
			return this.Name;
		}
	}

	#endregion

	#region IPrincipal Members

	public IIdentity Identity
	{
		get
		{
			return this;
		}
	}

	public bool IsInRole(string role)
	{
		return false;
	}

	#endregion
}